Description: here we only use the raw mean for analysis, because it has a higher heritibility rate I am thinking about doing TBBC3 2018 and 2019 sepetately. And also combined.

# remove all the variables
rm(list = ls())
# read in dataset
est_tbbc3_18 <- read.csv("/Users/qiuyuting/Documents/data_file/est_tbbc3_18.csv", header = TRUE)
est_tbbc3_19 <- read.csv("/Users/qiuyuting/Documents/data_file/est_tbbc3_19.csv", header = TRUE)
est_z025_19 <- read.csv("/Users/qiuyuting/Documents/data_file/est_z025_19.csv", header = TRUE)
est_tbbc3_1819 <- read.csv("/Users/qiuyuting/Documents/data_file/est_tbbc3_1819.csv", header = TRUE)
est_tbbc3_1819 <- est_tbbc3_1819[,-1]

show the correlation table

library(corrplot)
corrplot 0.84 loaded
colnames(est_tbbc3_18)[1] <- "genotype"
round(cor(est_tbbc3_18[,-1]),2)
            inci_rate mean mummi_rate mummi_rate1 new_mean1
inci_rate        1.00 0.87       0.70        0.59      0.61
mean             0.87 1.00       0.90        0.82      0.88
mummi_rate       0.70 0.90       1.00        0.96      0.82
mummi_rate1      0.59 0.82       0.96        1.00      0.83
new_mean1        0.61 0.88       0.82        0.83      1.00
colnames(est_tbbc3_19)[1] <- "genotype"
round(cor(est_tbbc3_19[,-1]),2)
            inci_rate  mean mummi_rate mummi_rate1 new_mean1 severity severity_1
inci_rate        1.00  0.86      -0.07       -0.21      0.53     0.01       0.18
mean             0.86  1.00       0.00       -0.14      0.84     0.26       0.37
mummi_rate      -0.07  0.00       1.00        0.88     -0.01     0.09      -0.04
mummi_rate1     -0.21 -0.14       0.88        1.00     -0.08     0.04      -0.11
new_mean1        0.53  0.84      -0.01       -0.08      1.00     0.29       0.39
severity         0.01  0.26       0.09        0.04      0.29     1.00       0.89
severity_1       0.18  0.37      -0.04       -0.11      0.39     0.89       1.00
colnames(est_z025_19)[1] <- "genotype"
round(cor(est_z025_19[,-1]),2)
            inci_rate mean mummi_rate mummi_rate1 new_mean1 severity severity_1
inci_rate        1.00 0.91       0.31        0.21      0.69     0.29       0.44
mean             0.91 1.00       0.38        0.29      0.87     0.50       0.60
mummi_rate       0.31 0.38       1.00        0.96      0.33     0.31       0.34
mummi_rate1      0.21 0.29       0.96        1.00      0.30     0.31       0.34
new_mean1        0.69 0.87       0.33        0.30      1.00     0.48       0.61
severity         0.29 0.50       0.31        0.31      0.48     1.00       0.91
severity_1       0.44 0.60       0.34        0.34      0.61     0.91       1.00
colnames(est_tbbc3_1819)[1] <- "genotype"
round(cor(na.omit(est_tbbc3_1819[,-1])),2)
          mean newmean1 inci_rate severity severity1
mean      1.00     0.85      0.86     0.27      0.40
newmean1  0.85     1.00      0.56     0.30      0.41
inci_rate 0.86     0.56      1.00     0.02      0.23
severity  0.27     0.30      0.02     1.00      0.90
severity1 0.40     0.41      0.23     0.90      1.00
pairs(est_tbbc3_18[,-1])

pairs(est_tbbc3_19[,-1])

pairs(est_z025_19[,-1])

pairs(est_tbbc3_1819[,-1])

2018 TBBC3 population PCA analysis

# 2018 all info in, without new variables
PCA_tbbc3_18 <- princomp(est_tbbc3_18[,-c(1,5,6)], cor = T, scores = T) #cor equals T means use the correlation matrix
summary(PCA_tbbc3_18)
Importance of components:
                          Comp.1    Comp.2    Comp.3
Standard deviation     1.6273363 0.5479225 0.2270626
Proportion of Variance 0.8827412 0.1000730 0.0171858
Cumulative Proportion  0.8827412 0.9828142 1.0000000
# One PC would be enough

loadings(PCA_tbbc3_18) # positively correlated

Loadings:
           Comp.1 Comp.2 Comp.3
inci_rate   0.559  0.741  0.372
mean        0.604        -0.795
mummi_rate  0.568 -0.669  0.479

               Comp.1 Comp.2 Comp.3
SS loadings     1.000  1.000  1.000
Proportion Var  0.333  0.333  0.333
Cumulative Var  0.333  0.667  1.000
biplot(PCA_tbbc3_18)

examine the normality of the PCA scores

tbbc3_18_scores <- PCA_tbbc3_18$scores[,1]
boxplot(est_tbbc3_18$mean)

boxplot(tbbc3_18_scores) # some outliers, but much better than the old one, and there are sone check lines 
shapiro.test(est_tbbc3_18$mean)

    Shapiro-Wilk normality test

data:  est_tbbc3_18$mean
W = 0.94795, p-value = 0.001563
shapiro.test(tbbc3_18_scores) # not quite normal

    Shapiro-Wilk normality test

data:  tbbc3_18_scores
W = 0.94928, p-value = 0.001876
library(ggpubr)
Loading required package: ggplot2
Registered S3 method overwritten by 'dplyr':
  method           from
  print.rowwise_df     
Loading required package: magrittr

ggqqplot(tbbc3_18_scores)

TBBC3 population in 2019

summary(PCA_tbbc3_19) # 2PC needed
Importance of components:
                          Comp.1    Comp.2    Comp.3     Comp.4
Standard deviation     1.3777306 1.0522000 0.9426800 0.32571142
Proportion of Variance 0.4745354 0.2767812 0.2221614 0.02652198
Cumulative Proportion  0.4745354 0.7513166 0.9734780 1.00000000
unclass(PCA_tbbc3_19$loadings)
               Comp.1      Comp.2      Comp.3      Comp.4
inci_rate   0.6760937  0.20082431  0.20962372  0.67721838
mean        0.7056058 -0.02702519  0.03491572 -0.70722763
mummi_rate -0.0338013 -0.71219681  0.70060309  0.02807995
severity    0.2094638 -0.67209742 -0.68117112  0.20103696
PCA_tbbc3_19$sdev ^2
   Comp.1    Comp.2    Comp.3    Comp.4 
1.8981415 1.1071249 0.8886457 0.1060879 
biplot(PCA_tbbc3_19)

TBBC3 population 2019, mummified data removed

PCA_tbbc3_19.1 <- princomp(est_tbbc3_19[,c(2,3,7)], cor = T, scores = T)
summary(PCA_tbbc3_19.1) 
Importance of components:
                          Comp.1    Comp.2     Comp.3
Standard deviation     1.3773633 0.9980421 0.32677567
Proportion of Variance 0.6323766 0.3320293 0.03559411
Cumulative Proportion  0.6323766 0.9644059 1.00000000
unclass(PCA_tbbc3_19.1$loadings)
             Comp.1       Comp.2     Comp.3
inci_rate 0.6749597  0.295373611  0.6761537
mean      0.7063195  0.006391578 -0.7078644
severity  0.2134061 -0.955360444  0.2043141
PCA_tbbc3_19.1$sdev ^2
   Comp.1    Comp.2    Comp.3 
1.8971297 0.9960880 0.1067823 
biplot(PCA_tbbc3_19.1)

TBBC3 populaiton 2018 2019 data combined (mummified removed)

TBBC3 populaiton 2018 2019 data combined (mummified kept) cannot be estimated.

Z025 population in 2019

PCA_z025_19 <- princomp(est_z025_19[,-c(1,5,6,8)], cor = T, scores = T)
summary(PCA_z025_19) # alomost need 2 pc, but one PC would be fine
Importance of components:
                          Comp.1    Comp.2    Comp.3     Comp.4
Standard deviation     1.5505137 0.9162318 0.8316714 0.25445825
Proportion of Variance 0.6010232 0.2098702 0.1729193 0.01618725
Cumulative Proportion  0.6010232 0.8108934 0.9838127 1.00000000
PCA_z025_19$loadings # mummirate and severity can see some opposite direction 

Loadings:
           Comp.1 Comp.2 Comp.3 Comp.4
inci_rate   0.560  0.492  0.150  0.650
mean        0.609  0.291        -0.737
mummi_rate  0.378 -0.656  0.653       
severity    0.415 -0.494 -0.741  0.187

               Comp.1 Comp.2 Comp.3 Comp.4
SS loadings      1.00   1.00   1.00   1.00
Proportion Var   0.25   0.25   0.25   0.25
Cumulative Var   0.25   0.50   0.75   1.00
PCA_z025_19$sdev ^ 2
   Comp.1    Comp.2    Comp.3    Comp.4 
2.4040929 0.8394808 0.6916773 0.0647490 
biplot(PCA_z025_19)


z025_19_scores <- PCA_z025_19$scores[,1]
boxplot(z025_19_scores) # looks nice

shapiro.test(z025_19_scores) # much better

    Shapiro-Wilk normality test

data:  z025_19_scores
W = 0.98331, p-value = 0.02263
ggqqplot(z025_19_scores) # nice

Z025 population 2019 dataset, without mummified

PCA_z025_19.1 <- princomp(est_z025_19[,-c(1,4,5,6,8)], cor = T, scores = T)
summary(PCA_z025_19.1) # need 1 PC here
Importance of components:
                         Comp.1    Comp.2     Comp.3
Standard deviation     1.473153 0.8745145 0.25504005
Proportion of Variance 0.723393 0.2549252 0.02168181
Cumulative Proportion  0.723393 0.9783182 1.00000000
unclass(PCA_z025_19.1$loadings)
             Comp.1     Comp.2     Comp.3
inci_rate 0.6156361  0.4426308  0.6519741
mean      0.6597818  0.1628836 -0.7335918
severity  0.4309062 -0.8817862  0.1917627
PCA_z025_19.1$sdev ^ 2
    Comp.1     Comp.2     Comp.3 
2.17017896 0.76477561 0.06504543 
biplot(PCA_z025_19.1)

# severity show sometthing opposite

tbbc3_19_scores.1 <- PCA_z025_19.1$scores[,1]
boxplot(tbbc3_19_scores.1)

shapiro.test(tbbc3_19_scores.1) #almost normal

    Shapiro-Wilk normality test

data:  tbbc3_19_scores.1
W = 0.98585, p-value = 0.05222
ggqqplot(tbbc3_19_scores.1)

get the scores of the PCA analysis

it makes sense to keep the mummified

# get PCA scores
tbbc3_18_scores <- as.data.frame(PCA_tbbc3_18$scores)
tbbc3_19_scores <- as.data.frame(PCA_tbbc3_19$scores)
tbbc3_19_scores.1 <- as.data.frame(PCA_tbbc3_19.1$scores)
tbbc3_1819_scores <- as.data.frame(PCA_tbbc3_1819$scores)

z025_scores <- as.data.frame(PCA_z025_19$scores)
z025_scores.1 <- as.data.frame(PCA_z025_19.1$scores)

# make a better dataframe
tbbc3_18_scores$PCA <- "tbbc3_18_scores"
tbbc3_18_scores <- cbind(tbbc3_18_scores, est_tbbc3_18[,1])

tbbc3_19_scores$PCA <- "tbbc3_19_scores"
tbbc3_19_scores <- cbind(tbbc3_19_scores, est_tbbc3_19[,1])

tbbc3_1819_scores$PCA <- "tbbc3_1819_scores"
tbbc3_1819_scores <- cbind(tbbc3_1819_scores, est_tbbc3_1819[,1])
Error in data.frame(..., check.names = FALSE) : 
  arguments imply differing number of rows: 93, 94

write out the results

write.csv(tbbc3_18_scores, "/Users/qiuyuting/Documents/data_file/tbbc3_18_scores.csv")
write.csv(tbbc3_19_scores, "/Users/qiuyuting/Documents/data_file/tbbc3_19_scores.csv")
write.csv(tbbc3_1819_scores, "/Users/qiuyuting/Documents/data_file/tbbc3_1819_scores.csv")
write.csv(tbbc3_19_scores.1, "/Users/qiuyuting/Documents/data_file/tbbc3_19_scores1.csv")
write.csv(z025_scores, "/Users/qiuyuting/Documents/data_file/z025_scores.csv")
write.csv(z025_scores.1, "/Users/qiuyuting/Documents/data_file/z025_scores1.csv")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKYXV0aG9yOiAiWXV0aW5nIFFpdSIKZGF0ZTogIjIwMjBfMDNfMjMiCm91dHB1dDoKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICBodG1sX25vdGVib29rOiBkZWZhdWx0Ci0tLQpEZXNjcmlwdGlvbjogaGVyZSB3ZSBvbmx5IHVzZSB0aGUgcmF3IG1lYW4gZm9yIGFuYWx5c2lzLCBiZWNhdXNlIGl0IGhhcyBhIGhpZ2hlciBoZXJpdGliaWxpdHkgcmF0ZQogICAgICAgICAgICAgIEkgYW0gdGhpbmtpbmcgYWJvdXQgZG9pbmcgVEJCQzMgMjAxOCBhbmQgMjAxOSBzZXBldGF0ZWx5LiBBbmQgYWxzbyBjb21iaW5lZC4KCiAgICAgICAgICAgICAgCmBgYHtyfQojIHJlbW92ZSBhbGwgdGhlIHZhcmlhYmxlcwpybShsaXN0ID0gbHMoKSkKYGBgCgoKYGBge3J9CiMgcmVhZCBpbiBkYXRhc2V0CmVzdF90YmJjM18xOCA8LSByZWFkLmNzdigiL1VzZXJzL3FpdXl1dGluZy9Eb2N1bWVudHMvZGF0YV9maWxlL2VzdF90YmJjM18xOC5jc3YiLCBoZWFkZXIgPSBUUlVFKQplc3RfdGJiYzNfMTkgPC0gcmVhZC5jc3YoIi9Vc2Vycy9xaXV5dXRpbmcvRG9jdW1lbnRzL2RhdGFfZmlsZS9lc3RfdGJiYzNfMTkuY3N2IiwgaGVhZGVyID0gVFJVRSkKZXN0X3owMjVfMTkgPC0gcmVhZC5jc3YoIi9Vc2Vycy9xaXV5dXRpbmcvRG9jdW1lbnRzL2RhdGFfZmlsZS9lc3RfejAyNV8xOS5jc3YiLCBoZWFkZXIgPSBUUlVFKQplc3RfdGJiYzNfMTgxOSA8LSByZWFkLmNzdigiL1VzZXJzL3FpdXl1dGluZy9Eb2N1bWVudHMvZGF0YV9maWxlL2VzdF90YmJjM18xODE5LmNzdiIsIGhlYWRlciA9IFRSVUUpCmVzdF90YmJjM18xODE5IDwtIGVzdF90YmJjM18xODE5WywtMV0KYGBgCgojIHNob3cgdGhlIGNvcnJlbGF0aW9uIHRhYmxlCmBgYHtyfQpsaWJyYXJ5KGNvcnJwbG90KQpjb2xuYW1lcyhlc3RfdGJiYzNfMTgpWzFdIDwtICJnZW5vdHlwZSIKcm91bmQoY29yKGVzdF90YmJjM18xOFssLTFdKSwyKQoKY29sbmFtZXMoZXN0X3RiYmMzXzE5KVsxXSA8LSAiZ2Vub3R5cGUiCnJvdW5kKGNvcihlc3RfdGJiYzNfMTlbLC0xXSksMikKCmNvbG5hbWVzKGVzdF96MDI1XzE5KVsxXSA8LSAiZ2Vub3R5cGUiCnJvdW5kKGNvcihlc3RfejAyNV8xOVssLTFdKSwyKQoKY29sbmFtZXMoZXN0X3RiYmMzXzE4MTkpWzFdIDwtICJnZW5vdHlwZSIKcm91bmQoY29yKG5hLm9taXQoZXN0X3RiYmMzXzE4MTlbLC0xXSkpLDIpCgpwYWlycyhlc3RfdGJiYzNfMThbLC0xXSkKcGFpcnMoZXN0X3RiYmMzXzE5WywtMV0pCnBhaXJzKGVzdF96MDI1XzE5WywtMV0pCnBhaXJzKGVzdF90YmJjM18xODE5WywtMV0pCmBgYAoKCiMgMjAxOCBUQkJDMyBwb3B1bGF0aW9uIFBDQSBhbmFseXNpcwpgYGB7cn0KIyAyMDE4IGFsbCBpbmZvIGluLCB3aXRob3V0IG5ldyB2YXJpYWJsZXMKUENBX3RiYmMzXzE4IDwtIHByaW5jb21wKGVzdF90YmJjM18xOFssLWMoMSw1LDYpXSwgY29yID0gVCwgc2NvcmVzID0gVCkgI2NvciBlcXVhbHMgVCBtZWFucyB1c2UgdGhlIGNvcnJlbGF0aW9uIG1hdHJpeApzdW1tYXJ5KFBDQV90YmJjM18xOCkKIyBPbmUgUEMgd291bGQgYmUgZW5vdWdoCgpsb2FkaW5ncyhQQ0FfdGJiYzNfMTgpICMgcG9zaXRpdmVseSBjb3JyZWxhdGVkCmJpcGxvdChQQ0FfdGJiYzNfMTgpCmBgYAoKIyBleGFtaW5lIHRoZSBub3JtYWxpdHkgb2YgdGhlIFBDQSBzY29yZXMKYGBge3J9CnRiYmMzXzE4X3Njb3JlcyA8LSBQQ0FfdGJiYzNfMTgkc2NvcmVzWywxXQpib3hwbG90KGVzdF90YmJjM18xOCRtZWFuKQpib3hwbG90KHRiYmMzXzE4X3Njb3JlcykgIyBzb21lIG91dGxpZXJzLCBidXQgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgb2xkIG9uZSwgYW5kIHRoZXJlIGFyZSBzb25lIGNoZWNrIGxpbmVzIApzaGFwaXJvLnRlc3QoZXN0X3RiYmMzXzE4JG1lYW4pCnNoYXBpcm8udGVzdCh0YmJjM18xOF9zY29yZXMpICMgbm90IHF1aXRlIG5vcm1hbApsaWJyYXJ5KGdncHVicikKZ2dxcXBsb3QodGJiYzNfMThfc2NvcmVzKQpgYGAKCgojIFRCQkMzIHBvcHVsYXRpb24gaW4gMjAxOQpgYGB7cn0KUENBX3RiYmMzXzE5IDwtIHByaW5jb21wKGVzdF90YmJjM18xOVssYygyLDMsNCw3KV0sIGNvciA9IFQsIHNjb3JlcyA9IFQpCnN1bW1hcnkoUENBX3RiYmMzXzE5KSAjIDJQQyBuZWVkZWQKdW5jbGFzcyhQQ0FfdGJiYzNfMTkkbG9hZGluZ3MpClBDQV90YmJjM18xOSRzZGV2IF4yCmJpcGxvdChQQ0FfdGJiYzNfMTkpCmBgYAoKIyBUQkJDMyBwb3B1bGF0aW9uIDIwMTksIG11bW1pZmllZCBkYXRhIHJlbW92ZWQKYGBge3J9ClBDQV90YmJjM18xOS4xIDwtIHByaW5jb21wKGVzdF90YmJjM18xOVssYygyLDMsNyldLCBjb3IgPSBULCBzY29yZXMgPSBUKQpzdW1tYXJ5KFBDQV90YmJjM18xOS4xKSAKdW5jbGFzcyhQQ0FfdGJiYzNfMTkuMSRsb2FkaW5ncykKUENBX3RiYmMzXzE5LjEkc2RldiBeMgpiaXBsb3QoUENBX3RiYmMzXzE5LjEpCmBgYAoKCgojIFRCQkMzIHBvcHVsYWl0b24gMjAxOCAyMDE5IGRhdGEgY29tYmluZWQgKG11bW1pZmllZCByZW1vdmVkKQpgYGB7cn0KUENBX3RiYmMzXzE4MTkgPC0gcHJpbmNvbXAobmEub21pdChlc3RfdGJiYzNfMTgxOVssLWMoMSwzLDYpXSksIGNvciA9IFQsIHNjb3JlcyA9IFQpCnN1bW1hcnkoUENBX3RiYmMzXzE4MTkpICMgYWxtb3N0IDEgcGMKdW5jbGFzcyhQQ0FfdGJiYzNfMTgxOSRsb2FkaW5ncykgIyBzdGlsbCwgc2V2ZXJpdHkgc2hvdyBzb21ldGhpZyBvcHBvc2l0ZQpiaXBsb3QoUENBX3RiYmMzXzE4MTkpClBDQV90YmJjM18xODE5JHNjb3Jlc1ssMV0gLT4gdGJiYzNfMTgxOV9zY29yZXMKYm94cGxvdCh0YmJjM18xODE5X3Njb3JlcykKc2hhcGlyby50ZXN0KHRiYmMzXzE4MTlfc2NvcmVzKQpnZ3FxcGxvdCh0YmJjM18xODE5X3Njb3JlcykKYGBgCgojIFRCQkMzIHBvcHVsYWl0b24gMjAxOCAyMDE5IGRhdGEgY29tYmluZWQgKG11bW1pZmllZCBrZXB0KSBjYW5ub3QgYmUgZXN0aW1hdGVkLgoKCgojIyBaMDI1IHBvcHVsYXRpb24gaW4gMjAxOQpgYGB7cn0KUENBX3owMjVfMTkgPC0gcHJpbmNvbXAoZXN0X3owMjVfMTlbLC1jKDEsNSw2LDgpXSwgY29yID0gVCwgc2NvcmVzID0gVCkKc3VtbWFyeShQQ0FfejAyNV8xOSkgIyBhbG9tb3N0IG5lZWQgMiBwYywgYnV0IG9uZSBQQyB3b3VsZCBiZSBmaW5lClBDQV96MDI1XzE5JGxvYWRpbmdzICMgbXVtbWlyYXRlIGFuZCBzZXZlcml0eSBjYW4gc2VlIHNvbWUgb3Bwb3NpdGUgZGlyZWN0aW9uIApQQ0FfejAyNV8xOSRzZGV2IF4gMgpiaXBsb3QoUENBX3owMjVfMTkpCgp6MDI1XzE5X3Njb3JlcyA8LSBQQ0FfejAyNV8xOSRzY29yZXNbLDFdCmJveHBsb3QoejAyNV8xOV9zY29yZXMpICMgbG9va3MgbmljZQpzaGFwaXJvLnRlc3QoejAyNV8xOV9zY29yZXMpICMgbXVjaCBiZXR0ZXIKZ2dxcXBsb3QoejAyNV8xOV9zY29yZXMpICMgbmljZQpgYGAKCgoKIyBaMDI1IHBvcHVsYXRpb24gMjAxOSBkYXRhc2V0LCB3aXRob3V0IG11bW1pZmllZApgYGB7cn0KUENBX3owMjVfMTkuMSA8LSBwcmluY29tcChlc3RfejAyNV8xOVssLWMoMSw0LDUsNiw4KV0sIGNvciA9IFQsIHNjb3JlcyA9IFQpCnN1bW1hcnkoUENBX3owMjVfMTkuMSkgIyBuZWVkIDEgUEMgaGVyZQp1bmNsYXNzKFBDQV96MDI1XzE5LjEkbG9hZGluZ3MpClBDQV96MDI1XzE5LjEkc2RldiBeIDIKYmlwbG90KFBDQV96MDI1XzE5LjEpCiMgc2V2ZXJpdHkgc2hvdyBzb21ldHRoaW5nIG9wcG9zaXRlCgp0YmJjM18xOV9zY29yZXMuMSA8LSBQQ0FfejAyNV8xOS4xJHNjb3Jlc1ssMV0KYm94cGxvdCh0YmJjM18xOV9zY29yZXMuMSkKc2hhcGlyby50ZXN0KHRiYmMzXzE5X3Njb3Jlcy4xKSAjYWxtb3N0IG5vcm1hbApnZ3FxcGxvdCh0YmJjM18xOV9zY29yZXMuMSkKYGBgCgoKCgojIGdldCB0aGUgc2NvcmVzIG9mIHRoZSBQQ0EgYW5hbHlzaXMKIyBpdCBtYWtlcyBzZW5zZSB0byBrZWVwIHRoZSBtdW1taWZpZWQKYGBge3J9CiMgZ2V0IFBDQSBzY29yZXMKdGJiYzNfMThfc2NvcmVzIDwtIGFzLmRhdGEuZnJhbWUoUENBX3RiYmMzXzE4JHNjb3JlcykKdGJiYzNfMTlfc2NvcmVzIDwtIGFzLmRhdGEuZnJhbWUoUENBX3RiYmMzXzE5JHNjb3JlcykKdGJiYzNfMTlfc2NvcmVzLjEgPC0gYXMuZGF0YS5mcmFtZShQQ0FfdGJiYzNfMTkuMSRzY29yZXMpCnRiYmMzXzE4MTlfc2NvcmVzIDwtIGFzLmRhdGEuZnJhbWUoUENBX3RiYmMzXzE4MTkkc2NvcmVzKQoKejAyNV9zY29yZXMgPC0gYXMuZGF0YS5mcmFtZShQQ0FfejAyNV8xOSRzY29yZXMpCnowMjVfc2NvcmVzLjEgPC0gYXMuZGF0YS5mcmFtZShQQ0FfejAyNV8xOS4xJHNjb3JlcykKCiMgbWFrZSBhIGJldHRlciBkYXRhZnJhbWUKdGJiYzNfMThfc2NvcmVzJFBDQSA8LSAidGJiYzNfMThfc2NvcmVzIgp0YmJjM18xOF9zY29yZXMgPC0gY2JpbmQodGJiYzNfMThfc2NvcmVzLCBlc3RfdGJiYzNfMThbLDFdKQoKdGJiYzNfMTlfc2NvcmVzJFBDQSA8LSAidGJiYzNfMTlfc2NvcmVzIgp0YmJjM18xOV9zY29yZXMgPC0gY2JpbmQodGJiYzNfMTlfc2NvcmVzLCBlc3RfdGJiYzNfMTlbLDFdKQoKZXN0X3RiYmMzXzE4MTkuMSA8LSBuYS5vbWl0KGVzdF90YmJjM18xODE5KQp0YmJjM18xODE5X3Njb3JlcyRQQ0EgPC0gInRiYmMzXzE4MTlfc2NvcmVzIgp0YmJjM18xODE5X3Njb3JlcyA8LSBjYmluZCh0YmJjM18xODE5X3Njb3JlcywgZXN0X3RiYmMzXzE4MTkuMVssMV0pCgp0YmJjM18xOV9zY29yZXMuMSRQQ0EgPC0gInRiYmMzXzE5X3Njb3Jlcy4xIgp0YmJjM18xOV9zY29yZXMuMSA8LSBjYmluZCh0YmJjM18xOV9zY29yZXMuMSwgZXN0X3RiYmMzXzE5WywxXSkKCnowMjVfc2NvcmVzJFBDQSA8LSAiejAyNV9zY29yZXMiCnowMjVfc2NvcmVzIDwtIGNiaW5kKHowMjVfc2NvcmVzLCBlc3RfejAyNV8xOVssMV0pCgp6MDI1X3Njb3Jlcy4xJFBDQSA8LSAiejAyNV9zY29yZXMuMSIKejAyNV9zY29yZXMuMSA8LSBjYmluZCh6MDI1X3Njb3Jlcy4xLCBlc3RfejAyNV8xOVssMV0pCmBgYAoKIyB3cml0ZSBvdXQgdGhlIHJlc3VsdHMgCmBgYHtyfQp3cml0ZS5jc3YodGJiYzNfMThfc2NvcmVzLCAiL1VzZXJzL3FpdXl1dGluZy9Eb2N1bWVudHMvZGF0YV9maWxlL3RiYmMzXzE4X3Njb3Jlcy5jc3YiKQp3cml0ZS5jc3YodGJiYzNfMTlfc2NvcmVzLCAiL1VzZXJzL3FpdXl1dGluZy9Eb2N1bWVudHMvZGF0YV9maWxlL3RiYmMzXzE5X3Njb3Jlcy5jc3YiKQp3cml0ZS5jc3YodGJiYzNfMTgxOV9zY29yZXMsICIvVXNlcnMvcWl1eXV0aW5nL0RvY3VtZW50cy9kYXRhX2ZpbGUvdGJiYzNfMTgxOV9zY29yZXMuY3N2IikKd3JpdGUuY3N2KHRiYmMzXzE5X3Njb3Jlcy4xLCAiL1VzZXJzL3FpdXl1dGluZy9Eb2N1bWVudHMvZGF0YV9maWxlL3RiYmMzXzE5X3Njb3JlczEuY3N2IikKd3JpdGUuY3N2KHowMjVfc2NvcmVzLCAiL1VzZXJzL3FpdXl1dGluZy9Eb2N1bWVudHMvZGF0YV9maWxlL3owMjVfc2NvcmVzLmNzdiIpCndyaXRlLmNzdih6MDI1X3Njb3Jlcy4xLCAiL1VzZXJzL3FpdXl1dGluZy9Eb2N1bWVudHMvZGF0YV9maWxlL3owMjVfc2NvcmVzMS5jc3YiKQpgYGAKCg==